When the device generates an interrupt, the general GIO interrupt handler calls your driver's registered interrupt routine and passes it the argument that was specified to setgiovector() as the argument. This is typically a unit number, or the address of a device-specific information structure.
Within the interrupt routine, the driver must wake up the sleeping upper-half process, if one is waiting on the transfer to complete. In a block device driver, the interrupt routine calls iodone() to indicate that a block type I/O transfer for the buffer is complete (see "Waiting for Block I/O to Complete").